{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据获取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T12:46:31.635219Z",
     "start_time": "2021-02-17T12:46:30.426603Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from pylab import mpl\n",
    "mpl.rcParams['font.sans-serif']=['SimHei']\n",
    "mpl.rcParams['axes.unicode_minus']=False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T12:46:37.921045Z",
     "start_time": "2021-02-17T12:46:37.376282Z"
    }
   },
   "outputs": [],
   "source": [
    "import tushare as ts\n",
    "token='f6b511d8d4529f19319e1861edadda749e64a5b8573102deec80cfd8'\n",
    "pro=ts.pro_api(token)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T12:56:07.216918Z",
     "start_time": "2021-02-17T12:56:07.205975Z"
    }
   },
   "outputs": [],
   "source": [
    "#获取指数数据\n",
    "def get_data(code,start,end,asset='E'):\n",
    "    try:\n",
    "        df = ts.pro_bar(ts_code=code, asset=asset,adj='qfq',start_date=start,end_date=end)\n",
    "        df['date']=pd.to_datetime(df.trade_date)\n",
    "        df=df.sort_values('date')\n",
    "        df=df.reset_index()\n",
    "        return df[['date','open','high','low','close','vol']]\n",
    "    except Exception as e:\n",
    "        print(e.args)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T12:58:57.098227Z",
     "start_time": "2021-02-17T12:58:56.556133Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>vol</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4155</th>\n",
       "      <td>2021-02-04</td>\n",
       "      <td>3503.7785</td>\n",
       "      <td>3524.7219</td>\n",
       "      <td>3465.7706</td>\n",
       "      <td>3501.8592</td>\n",
       "      <td>298834854.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4156</th>\n",
       "      <td>2021-02-05</td>\n",
       "      <td>3509.4874</td>\n",
       "      <td>3536.5417</td>\n",
       "      <td>3492.9624</td>\n",
       "      <td>3496.3329</td>\n",
       "      <td>290146174.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4157</th>\n",
       "      <td>2021-02-08</td>\n",
       "      <td>3504.5631</td>\n",
       "      <td>3542.2075</td>\n",
       "      <td>3492.1286</td>\n",
       "      <td>3532.4467</td>\n",
       "      <td>249799619.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4158</th>\n",
       "      <td>2021-02-09</td>\n",
       "      <td>3539.7726</td>\n",
       "      <td>3604.0112</td>\n",
       "      <td>3528.6755</td>\n",
       "      <td>3603.4890</td>\n",
       "      <td>253821760.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4159</th>\n",
       "      <td>2021-02-10</td>\n",
       "      <td>3612.6125</td>\n",
       "      <td>3662.7655</td>\n",
       "      <td>3612.5049</td>\n",
       "      <td>3655.0880</td>\n",
       "      <td>257940824.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           date       open       high        low      close          vol\n",
       "4155 2021-02-04  3503.7785  3524.7219  3465.7706  3501.8592  298834854.0\n",
       "4156 2021-02-05  3509.4874  3536.5417  3492.9624  3496.3329  290146174.0\n",
       "4157 2021-02-08  3504.5631  3542.2075  3492.1286  3532.4467  249799619.0\n",
       "4158 2021-02-09  3539.7726  3604.0112  3528.6755  3603.4890  253821760.0\n",
       "4159 2021-02-10  3612.6125  3662.7655  3612.5049  3655.0880  257940824.0"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "code ='000001.SH'\n",
    "start='20040101'\n",
    "end  ='20210210'\n",
    "asset='I'\n",
    "sh=get_data(code,start,end,asset)\n",
    "sh.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 计算技术指标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "技术指标可以分为以下四类：  \n",
    "\n",
    "- RSI, Volume (plain), Bollinger Bands, Aroon, Price Volume Trend, acceleration bands\n",
    "- Stochastic, Chaikin Money Flow, Parabolic SAR, Rate of Change, Volume weighted average Price, momentum\n",
    "- Commodity Channel Index, On Balance Volume, Keltner Channels, Triple Exponential Moving Average, Normalized Averager True Range ,directional movement indicators\n",
    "- MACD, Money flowindex , Ichimoku, William %R, Volume MINMAX, adaptive moving average"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T13:05:35.976056Z",
     "start_time": "2021-02-17T13:05:35.966083Z"
    }
   },
   "outputs": [],
   "source": [
    "import copy\n",
    "ti_df1 = copy.deepcopy(sh)\n",
    "ti_df2 = copy.deepcopy(sh)\n",
    "ti_df3 = copy.deepcopy(sh)\n",
    "ti_df4 = copy.deepcopy(sh)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第一类技术指标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RSI"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T13:05:37.302396Z",
     "start_time": "2021-02-17T13:05:37.295414Z"
    }
   },
   "outputs": [],
   "source": [
    "def rsi(values):\n",
    "    up = values[values>0].mean()\n",
    "    down = -1*values[values<0].mean()\n",
    "    return 100 * up / (up + down)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T13:05:41.978224Z",
     "start_time": "2021-02-17T13:05:37.993882Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>vol</th>\n",
       "      <th>rsi_14d</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4155</th>\n",
       "      <td>2021-02-04</td>\n",
       "      <td>3503.7785</td>\n",
       "      <td>3524.7219</td>\n",
       "      <td>3465.7706</td>\n",
       "      <td>3501.8592</td>\n",
       "      <td>298834854.0</td>\n",
       "      <td>41.465988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4156</th>\n",
       "      <td>2021-02-05</td>\n",
       "      <td>3509.4874</td>\n",
       "      <td>3536.5417</td>\n",
       "      <td>3492.9624</td>\n",
       "      <td>3496.3329</td>\n",
       "      <td>290146174.0</td>\n",
       "      <td>42.728189</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4157</th>\n",
       "      <td>2021-02-08</td>\n",
       "      <td>3504.5631</td>\n",
       "      <td>3542.2075</td>\n",
       "      <td>3492.1286</td>\n",
       "      <td>3532.4467</td>\n",
       "      <td>249799619.0</td>\n",
       "      <td>45.286330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4158</th>\n",
       "      <td>2021-02-09</td>\n",
       "      <td>3539.7726</td>\n",
       "      <td>3604.0112</td>\n",
       "      <td>3528.6755</td>\n",
       "      <td>3603.4890</td>\n",
       "      <td>253821760.0</td>\n",
       "      <td>52.461668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4159</th>\n",
       "      <td>2021-02-10</td>\n",
       "      <td>3612.6125</td>\n",
       "      <td>3662.7655</td>\n",
       "      <td>3612.5049</td>\n",
       "      <td>3655.0880</td>\n",
       "      <td>257940824.0</td>\n",
       "      <td>53.953985</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           date       open       high        low      close          vol  \\\n",
       "4155 2021-02-04  3503.7785  3524.7219  3465.7706  3501.8592  298834854.0   \n",
       "4156 2021-02-05  3509.4874  3536.5417  3492.9624  3496.3329  290146174.0   \n",
       "4157 2021-02-08  3504.5631  3542.2075  3492.1286  3532.4467  249799619.0   \n",
       "4158 2021-02-09  3539.7726  3604.0112  3528.6755  3603.4890  253821760.0   \n",
       "4159 2021-02-10  3612.6125  3662.7655  3612.5049  3655.0880  257940824.0   \n",
       "\n",
       "        rsi_14d  \n",
       "4155  41.465988  \n",
       "4156  42.728189  \n",
       "4157  45.286330  \n",
       "4158  52.461668  \n",
       "4159  53.953985  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ti_df1['rsi_14d'] = ((ti_df1['close']-ti_df1['close'].shift(1))\n",
    "                     .fillna(0)\n",
    "                     .rolling(center=False, window=14).apply(rsi)\n",
    "                     .fillna(0))\n",
    "ti_df1.tail(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculation of Volume (Plain)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T13:08:58.647711Z",
     "start_time": "2021-02-17T13:08:58.628763Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>vol</th>\n",
       "      <th>rsi_14d</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4155</th>\n",
       "      <td>2021-02-04</td>\n",
       "      <td>3503.7785</td>\n",
       "      <td>3524.7219</td>\n",
       "      <td>3465.7706</td>\n",
       "      <td>3501.8592</td>\n",
       "      <td>298834854.0</td>\n",
       "      <td>41.465988</td>\n",
       "      <td>298834854.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4156</th>\n",
       "      <td>2021-02-05</td>\n",
       "      <td>3509.4874</td>\n",
       "      <td>3536.5417</td>\n",
       "      <td>3492.9624</td>\n",
       "      <td>3496.3329</td>\n",
       "      <td>290146174.0</td>\n",
       "      <td>42.728189</td>\n",
       "      <td>290146174.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4157</th>\n",
       "      <td>2021-02-08</td>\n",
       "      <td>3504.5631</td>\n",
       "      <td>3542.2075</td>\n",
       "      <td>3492.1286</td>\n",
       "      <td>3532.4467</td>\n",
       "      <td>249799619.0</td>\n",
       "      <td>45.286330</td>\n",
       "      <td>249799619.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4158</th>\n",
       "      <td>2021-02-09</td>\n",
       "      <td>3539.7726</td>\n",
       "      <td>3604.0112</td>\n",
       "      <td>3528.6755</td>\n",
       "      <td>3603.4890</td>\n",
       "      <td>253821760.0</td>\n",
       "      <td>52.461668</td>\n",
       "      <td>253821760.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4159</th>\n",
       "      <td>2021-02-10</td>\n",
       "      <td>3612.6125</td>\n",
       "      <td>3662.7655</td>\n",
       "      <td>3612.5049</td>\n",
       "      <td>3655.0880</td>\n",
       "      <td>257940824.0</td>\n",
       "      <td>53.953985</td>\n",
       "      <td>257940824.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           date       open       high        low      close          vol  \\\n",
       "4155 2021-02-04  3503.7785  3524.7219  3465.7706  3501.8592  298834854.0   \n",
       "4156 2021-02-05  3509.4874  3536.5417  3492.9624  3496.3329  290146174.0   \n",
       "4157 2021-02-08  3504.5631  3542.2075  3492.1286  3532.4467  249799619.0   \n",
       "4158 2021-02-09  3539.7726  3604.0112  3528.6755  3603.4890  253821760.0   \n",
       "4159 2021-02-10  3612.6125  3662.7655  3612.5049  3655.0880  257940824.0   \n",
       "\n",
       "        rsi_14d       volume  \n",
       "4155  41.465988  298834854.0  \n",
       "4156  42.728189  290146174.0  \n",
       "4157  45.286330  249799619.0  \n",
       "4158  52.461668  253821760.0  \n",
       "4159  53.953985  257940824.0  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ti_df1['volume'] = ti_df1['vol'].fillna(0)\n",
    "ti_df1.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculation of Bollinger Bands"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T13:11:40.799514Z",
     "start_time": "2021-02-17T13:11:40.790536Z"
    }
   },
   "outputs": [],
   "source": [
    "def bbands(price, length=30, numsd=2):\n",
    "    ave = price.rolling(window = length, center = False).mean()\n",
    "    sd = price.rolling(window = length, center = False).std()\n",
    "    upband = ave + (sd*numsd)\n",
    "    dnband = ave - (sd*numsd)\n",
    "    return np.round(ave,3), np.round(upband,3), np.round(dnband,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-17T13:11:58.847313Z",
     "start_time": "2021-02-17T13:11:58.811373Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>vol</th>\n",
       "      <th>rsi_14d</th>\n",
       "      <th>volume</th>\n",
       "      <th>BB_Middle_Band</th>\n",
       "      <th>BB_Upper_Band</th>\n",
       "      <th>BB_Lower_Band</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4155</th>\n",
       "      <td>2021-02-04</td>\n",
       "      <td>3503.7785</td>\n",
       "      <td>3524.7219</td>\n",
       "      <td>3465.7706</td>\n",
       "      <td>3501.8592</td>\n",
       "      <td>298834854.0</td>\n",
       "      <td>41.465988</td>\n",
       "      <td>298834854.0</td>\n",
       "      <td>3561.399</td>\n",
       "      <td>3604.204</td>\n",
       "      <td>3518.594</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4156</th>\n",
       "      <td>2021-02-05</td>\n",
       "      <td>3509.4874</td>\n",
       "      <td>3536.5417</td>\n",
       "      <td>3492.9624</td>\n",
       "      <td>3496.3329</td>\n",
       "      <td>290146174.0</td>\n",
       "      <td>42.728189</td>\n",
       "      <td>290146174.0</td>\n",
       "      <td>3557.710</td>\n",
       "      <td>3602.841</td>\n",
       "      <td>3512.579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4157</th>\n",
       "      <td>2021-02-08</td>\n",
       "      <td>3504.5631</td>\n",
       "      <td>3542.2075</td>\n",
       "      <td>3492.1286</td>\n",
       "      <td>3532.4467</td>\n",
       "      <td>249799619.0</td>\n",
       "      <td>45.286330</td>\n",
       "      <td>249799619.0</td>\n",
       "      <td>3557.758</td>\n",
       "      <td>3602.860</td>\n",
       "      <td>3512.655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4158</th>\n",
       "      <td>2021-02-09</td>\n",
       "      <td>3539.7726</td>\n",
       "      <td>3604.0112</td>\n",
       "      <td>3528.6755</td>\n",
       "      <td>3603.4890</td>\n",
       "      <td>253821760.0</td>\n",
       "      <td>52.461668</td>\n",
       "      <td>253821760.0</td>\n",
       "      <td>3557.515</td>\n",
       "      <td>3602.343</td>\n",
       "      <td>3512.687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4159</th>\n",
       "      <td>2021-02-10</td>\n",
       "      <td>3612.6125</td>\n",
       "      <td>3662.7655</td>\n",
       "      <td>3612.5049</td>\n",
       "      <td>3655.0880</td>\n",
       "      <td>257940824.0</td>\n",
       "      <td>53.953985</td>\n",
       "      <td>257940824.0</td>\n",
       "      <td>3560.337</td>\n",
       "      <td>3609.461</td>\n",
       "      <td>3511.213</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           date       open       high        low      close          vol  \\\n",
       "4155 2021-02-04  3503.7785  3524.7219  3465.7706  3501.8592  298834854.0   \n",
       "4156 2021-02-05  3509.4874  3536.5417  3492.9624  3496.3329  290146174.0   \n",
       "4157 2021-02-08  3504.5631  3542.2075  3492.1286  3532.4467  249799619.0   \n",
       "4158 2021-02-09  3539.7726  3604.0112  3528.6755  3603.4890  253821760.0   \n",
       "4159 2021-02-10  3612.6125  3662.7655  3612.5049  3655.0880  257940824.0   \n",
       "\n",
       "        rsi_14d       volume  BB_Middle_Band  BB_Upper_Band  BB_Lower_Band  \n",
       "4155  41.465988  298834854.0        3561.399       3604.204       3518.594  \n",
       "4156  42.728189  290146174.0        3557.710       3602.841       3512.579  \n",
       "4157  45.286330  249799619.0        3557.758       3602.860       3512.655  \n",
       "4158  52.461668  253821760.0        3557.515       3602.343       3512.687  \n",
       "4159  53.953985  257940824.0        3560.337       3609.461       3511.213  "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ti_df1['BB_Middle_Band'], ti_df1['BB_Upper_Band'], ti_df1['BB_Lower_Band'] = bbands(ti_df1['close'], length=20, numsd=1)\n",
    "ti_df1['BB_Middle_Band'] = ti_df1['BB_Middle_Band'].fillna(0)\n",
    "ti_df1['BB_Upper_Band'] = ti_df1['BB_Upper_Band'].fillna(0)\n",
    "ti_df1['BB_Lower_Band'] = ti_df1['BB_Lower_Band'].fillna(0)\n",
    "ti_df1.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
